interface A {
  x: number;
  foo(bar: number): number; // 5
  foo(bar: 'a'): number; // 2
}

interface A {
  y: number;
  foo(bar: string): string; // 3
  foo(bar: number[]): number[]; // 4
  foo(bar: 'b'): number; // 1
}

// 在接口中定义的函数呢就是这个函数重载的列表，那么在实现的时候呢，我们就需要指定一个更为宽泛的类型

let aa: A = {
  x: 1,
  y: 1,
  foo(bar: any) {
    // 参数指定为 any 类型
    return bar; // 然后返回值呢我们也指定为 any 类型直接把 bar 返回
  }
}


// 我们先定义一个函数，然后呢我们在定义一个同名的命名空间

function Lib(){}
// 要放在函数定义的后面
namespace Lib {
  export let version = '1.0'
}
// 我们呢可以把这个打印出来看一下
console.log(Lib.version);


class C1 {}
// 要放在类定义的后面
namespace C1 {
  export let state = 1;
}
// 那么这个呢就相当于给 类 添加了一些静态的属性
// 我们把它打印出来看一下
console.log(C1.state);

enum Color {
  Red,
  Yellow,
  Blue
}
// 然后呢我们定义一个相同名字的命名空间
namespace Color{
  // 在这个命名空间中呢我们可以导出一个函数，这样呢就相当于给这个枚举类型增加了一个方法
  export function mix() {}
}
// 我们可以打印出来看一下
console.log(Color);

